home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / akcl / akcl1615.lha / mp / lo-rios.s < prev    next >
Text File  |  1991-06-19  |  3KB  |  107 lines

  1. .file "lo-rios.s"
  2.  # Copyright W. Schelter 1991
  3. ######MULUL3#######
  4. #unfortunately the mul operation on rios is signed,
  5. # so we have to go to a bit of work to get the unsigned op.
  6. .toc
  7. .globl  mulul3[ds]
  8. .csect mulul3[ds]
  9.        .long .mulul3[PR]
  10.        .long TOC[tc0]
  11.        .long 0
  12.        .toc
  13. #     MULUL3(x,y,hi)
  14. T.mulul3:  .tc   .mulul3[tc],mulul3[ds]
  15.          .globl  .mulul3[PR]
  16.          .csect   .mulul3[PR]
  17.          mul.    0,3,4        # hp = r0
  18.      cmpi     0,4,0       # 
  19.          bge      Ypos                    # branch if reg4 >=0
  20.      a        0,3,0
  21. Ypos:
  22.      cmpi     0,3,0
  23.      bge      Xpos
  24.      a        0,4,0
  25. Xpos:
  26.      mfmq    3
  27.      st      0,0x0(5)
  28.      br
  29. ######### DIVSL3 ############
  30. # a divide just like divul3, except that
  31. # it assumes that x,y are signed numbers.
  32. .toc
  33. .globl  divsl3[ds]
  34. .csect divsl3[ds]
  35.        .long .divsl3[PR]
  36.        .long TOC[tc0]
  37.        .long 0
  38.        .toc
  39. #      DIVSL3(lo,divisor,rem)
  40. #      long h,divisor,*rem
  41. T.divsl3:  .tc   .divsl3[tc],divsl3[ds]
  42.          .globl  .divsl3[PR]
  43.          .csect   .divsl3[PR]
  44.     mtmq   3                   # move lo to q reg
  45.     l      3,0x0(5)            # put hi in reg3
  46.     div    3,3,4               # r3 = (r3:qreg)/r4
  47.     mfmq   4                   # move remainder to reg6
  48.         st     4,0x0(5)            # store 6 in *rem
  49.     br
  50. #########Xdivul3#################
  51. # Below is a broken attempt to do a divul3 which
  52. # does the test and branches to the slow one if necessary.
  53. .globl .slowdivul3[PR]
  54.     .toc
  55. .globl  Xdivul3[ds]
  56. .csect Xdivul3[ds]
  57.        .long .Xdivul3[PR]
  58.        .long TOC[tc0]
  59.        .long 0
  60.        .toc
  61. #    old(D,H,L,QP,RP)
  62. #      XDIVUL3(lo,divisor,rem)
  63. #        long h,divisor,*rem
  64. #
  65. T.Xdivul3:  .tc   .Xdivul3[tc],Xdivul3[ds]
  66.          .globl  .Xdivul3[PR]
  67.          .csect   .Xdivul3[PR]
  68.         cmpi     0,4,0       #
  69.     l      6,0x0(5) 
  70.     blt    Lslow
  71.     a    0,6,6
  72.     cmp     1,4,0
  73.         bgt     Ldivsl           # branch if reg4 >=0
  74. Lslow:
  75.     b     .slowdivul3[PR]
  76. Ldivsl: mtmq   3                   # move lo to q reg
  77.     div    3,6,4               # r3 = (r6:qreg)/r4
  78.     mfmq   4                   # move remainder to reg4
  79.         st     4,0x0(5)            # store 6 in *rem
  80.     br
  81. ##### Flush the instruction cache.  Necessary for loading.
  82. .toc
  83. #T.myics.s:.tc     myics.s[tc],myics.s[rw]
  84.           .globl  myics[ds]
  85. .csect myics[ds]
  86.        .long .myics[PR]
  87.        .long TOC[tc0]
  88.        .long 0
  89.        .toc
  90. T.myics:  .tc   .myics[tc],myics[ds]
  91.      .globl     .myics[PR]
  92.      .csect   .myics[PR]
  93.     dcs 
  94.     ics
  95.     brl
  96.     
  97. #### Allocate lots of space for toc entries during dynamic loading.
  98. .globl akcltoc[ds]
  99.         .csect akcltoc[ds]
  100.     .long .akcltoc[tc]        
  101.     .csect .akcltoc[tc]
  102.     .space 24000
  103. .globl toc_start[ds]
  104.        .csect toc_start[ds]
  105.       .long TOC[tc0]
  106.  
  107.